﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Wizard.Source
{
    public interface IMethodParameter
    {
        bool Optional { get; set; }
        object DefaultValue { get; set; }
        string Name { get; set; }
        IBlockSource IBlockSource { get; set; }
        bool Nullable { get; set; }
        Type Type { get; set; }
    }

    //public class MethodParameter /*Source*/ : Identifier
    //{
    //    private ParameterAccess mAccess;
    //    private object mDefaultValue;
    //    private bool mOptional;

    //    public ParameterAccess Access
    //    {
    //        get { return mAccess; }
    //        set { mAccess = value; }
    //    }

    //    public object DefaultValue
    //    {
    //        get { return mDefaultValue; }
    //        set { mDefaultValue = value; }
    //    }

    //    public bool Optional
    //    {
    //        get { return mOptional; }
    //        set { mOptional = value; }
    //    }
    //}

    public interface IMethodParameterCollection
    {
        int Count { get; }
        IMethodParameter GetItem(int index);
        void SetItem(int index, IMethodParameter value);
        int IndexOf(string parameterName);
    }

    //public class MethodParameterCollection
    //{
    //    public readonly IMethodSource Method;
    //    private List<MethodParameter> mParameters;

    //    public MethodParameterCollection(IMethodSource method)
    //    {
    //        mParameters = new List<MethodParameter>();
    //        Method=method;
    //    }

    //    public MethodParameter Add(string parameterName, Type parameterType, ParameterAccess access)
    //    {
    //        var parameter=new MethodParameter();
    //        parameter.Name = parameterName;
    //        parameter.Type = parameterType;
    //        parameter.Access = access;
    //        mParameters.Add(parameter);
    //        return parameter;
    //    }

    //    public int Count
    //    {
    //        get { return mParameters.Count; }
    //    }

    //    internal int IndexOf(string name)
    //    {
    //        for (int i = 0; i < mParameters.Count; i++)
    //        {
    //            if (string.Compare(mParameters[i].Name, name, true) == 0) return i;
    //        }
    //        return -1;
    //    }
     
    //    public MethodParameter this[int index]
    //    { 
    //        get
    //        {
    //            return mParameters[index];
    //        }
    //        set
    //        {
    //            throw new NotImplementedException();
    //        }
    //    }

    //}



}
